Indian Landmark Detection Using VGG-19¶

Importing libraries¶

In [ ]:
import os
# import cv2
import pickle
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib.image as mpimg

import keras
import tensorflow

from tensorflow.keras.models import Model
from tensorflow.keras.utils import plot_model
from tensorflow.keras.models import Sequential
from tensorflow.keras.applications import VGG19
from tensorflow.keras.callbacks import EarlyStopping
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.layers import Input, Lambda, Dense, Flatten, Dropout, BatchNormalization, Activation

from sklearn.metrics import confusion_matrix, classification_report, accuracy_score, recall_score, precision_score, f1_score 

Defining data paths¶

In [ ]:
train_path = r'archive - Copy\Indian-monuments\images\train'
test_path = r'archive - Copy\Indian-monuments\images\test'

Converting image to pixels¶

In [ ]:
for folder in os.listdir(train_path):
    sub_path = train_path + "/" + folder
    
    print(folder)
    for i in range(1):
        temp_path = os.listdir(sub_path)[i]
        temp_path = sub_path + "/" + temp_path
        img = mpimg.imread(temp_path)
        imgplot = plt.imshow(img)
        plt.show()
Ajanta Caves
No description has been provided for this image
alai_darwaza
No description has been provided for this image
alai_minar
No description has been provided for this image
basilica_of_bom_jesus
No description has been provided for this image
Charar-E- Sharif
No description has been provided for this image
charminar
No description has been provided for this image
Chhota_Imambara
No description has been provided for this image
Ellora Caves
No description has been provided for this image
Fatehpur Sikri
No description has been provided for this image
Gateway of India
No description has been provided for this image
golden temple
No description has been provided for this image
hawa mahal pics
No description has been provided for this image
Humayun_s Tomb
No description has been provided for this image
India gate pics
No description has been provided for this image
iron_pillar
No description has been provided for this image
jamali_kamali_tomb
No description has been provided for this image
Khajuraho
No description has been provided for this image
lotus_temple
No description has been provided for this image
mysore_palace
No description has been provided for this image
qutub_minar
No description has been provided for this image
Sun Temple Konark
No description has been provided for this image
tajmahal
No description has been provided for this image
tanjavur temple
No description has been provided for this image
victoria memorial
No description has been provided for this image
In [ ]:
def imagearray(path, size):
    data = []
    for folder in os.listdir(path):
        sub_path=path+"/"+folder

        for img in os.listdir(sub_path):
            image_path=sub_path+"/"+img
            img_arr=cv2.imread(image_path)
            img_arr=cv2.resize(img_arr,size)
            
            data.append(img_arr)

    return data
In [ ]:
size = (250,250)
# train = imagearray(train_path, size)
In [ ]:
# test = imagearray(test_path, size)
In [ ]:
 

Normalization¶

In [ ]:
# x_train = np.array(train)
# x_test = np.array(test)

# x_train.shape,x_test.shape
In [ ]:
# x_train = x_train/255.0
# x_test = x_test/255.0

Defining target variables¶

In [ ]:
def data_class(data_path, size, class_mode):
    datagen = ImageDataGenerator(rescale = 1./255)
    classes = datagen.flow_from_directory(data_path,
                                          target_size = size,
                                          batch_size = 32,
                                          class_mode = class_mode)
    return classes
In [ ]:
size = (250,250)

train_class = data_class(train_path, size, 'sparse')
test_class = data_class(test_path, size, 'sparse')
Found 7909 images belonging to 24 classes.
Found 1045 images belonging to 24 classes.
In [ ]:
y_train = train_class.classes
y_test = test_class.classes
train_d=train_class
test_d=test_class
print(train_class)
<keras.src.legacy.preprocessing.image.DirectoryIterator object at 0x000002ACF0F07DD0>
In [ ]:
train_class.class_indices
Out[ ]:
{'Ajanta Caves': 0,
 'Charar-E- Sharif': 1,
 'Chhota_Imambara': 2,
 'Ellora Caves': 3,
 'Fatehpur Sikri': 4,
 'Gateway of India': 5,
 'Humayun_s Tomb': 6,
 'India gate pics': 7,
 'Khajuraho': 8,
 'Sun Temple Konark': 9,
 'alai_darwaza': 10,
 'alai_minar': 11,
 'basilica_of_bom_jesus': 12,
 'charminar': 13,
 'golden temple': 14,
 'hawa mahal pics': 15,
 'iron_pillar': 16,
 'jamali_kamali_tomb': 17,
 'lotus_temple': 18,
 'mysore_palace': 19,
 'qutub_minar': 20,
 'tajmahal': 21,
 'tanjavur temple': 22,
 'victoria memorial': 23}
In [ ]:
# y_train.shape,y_test.shape
In [ ]:
import tensorflow as tf
img_height,img_width=180,180
batch_size=32
train_ds = tf.keras.preprocessing.image_dataset_from_directory(
  train_path,
  validation_split=0.2,
  subset="training",
  seed=123,
  image_size=(img_height, img_width),
  batch_size=batch_size)
Found 7909 files belonging to 24 classes.
Using 6328 files for training.
In [ ]:
val_ds = tf.keras.preprocessing.image_dataset_from_directory(
  train_path,
  validation_split=0.2,
  subset="validation",
  seed=123,
  image_size=(img_height, img_width),
  batch_size=batch_size)
Found 7909 files belonging to 24 classes.
Using 1581 files for validation.

VGG19 Model¶

In [ ]:
# vgg = VGG19(input_shape = (250, 250, 3), weights = 'imagenet', include_top = False)
In [ ]:
# for layer in vgg.layers:
#     layer.trainable = False

# x = Flatten()(vgg.output)
# prediction = Dense(24, activation='softmax')(x)

# model = Model(inputs=vgg.input, outputs=prediction)
# model.summary()
# model.compile(
#   loss='sparse_categorical_crossentropy',
#   optimizer="adam",
#   metrics=['accuracy']
# )
In [ ]:
import tensorflow as tf

model = Sequential([tf.keras.layers.BatchNormalization()])

pretrained_model= tf.keras.applications.ResNet50V2(include_top=False,
                   input_shape=(180,180,3),
                   pooling='avg',classes=24,
                   weights='imagenet')
for layer in pretrained_model.layers:
        layer.trainable=False
# model.add(tf.keras.layers.Conv2D(filters=180,kernel_size=3,activation="relu",input_shape=[180,180,3]))
model.add(tf.keras.layers.Conv2D(filters=64,kernel_size=3,activation="relu",input_shape=[178,178,3]))
# model.add(tf.keras.layers.MaxPool2D(strides=2,pool_size=2))
model.add(pretrained_model)
model.add(Flatten())
model.add(Dense(units=512, activation='relu'))
model.add(Dense(units=24, activation='softmax'))
# model.add(Flatten())
     
In [ ]:
model.compile(optimizer="adam", loss="categorical_crossentropy", metrics=['accuracy'])
In [ ]:
# early_stop = EarlyStopping(monitor = 'val_loss', mode='min', verbose = 1, patience = 5)
In [ ]:
# ! pip install tensorflow_hub
Requirement already satisfied: tensorflow_hub in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (0.16.1)
Requirement already satisfied: numpy>=1.12.0 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow_hub) (1.26.2)
Requirement already satisfied: protobuf>=3.19.6 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow_hub) (4.25.3)
Requirement already satisfied: tf-keras>=2.14.1 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow_hub) (2.16.0)
Requirement already satisfied: tensorflow<2.17,>=2.16 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tf-keras>=2.14.1->tensorflow_hub) (2.16.1)
Requirement already satisfied: tensorflow-intel==2.16.1 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (2.16.1)
Requirement already satisfied: absl-py>=1.0.0 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (2.1.0)
Requirement already satisfied: astunparse>=1.6.0 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (1.6.3)
Requirement already satisfied: flatbuffers>=23.5.26 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (23.5.26)
Requirement already satisfied: gast!=0.5.0,!=0.5.1,!=0.5.2,>=0.2.1 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (0.5.4)
Requirement already satisfied: google-pasta>=0.1.1 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (0.2.0)
Requirement already satisfied: h5py>=3.10.0 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (3.10.0)
Requirement already satisfied: libclang>=13.0.0 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (16.0.6)
Requirement already satisfied: ml-dtypes~=0.3.1 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (0.3.2)
Requirement already satisfied: opt-einsum>=2.3.2 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (3.3.0)
Requirement already satisfied: packaging in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (23.2)
Requirement already satisfied: requests<3,>=2.21.0 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (2.31.0)
Requirement already satisfied: setuptools in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (69.0.2)
Requirement already satisfied: six>=1.12.0 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (1.16.0)
Requirement already satisfied: termcolor>=1.1.0 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (2.4.0)
Requirement already satisfied: typing-extensions>=3.6.6 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (4.10.0)
Requirement already satisfied: wrapt>=1.11.0 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (1.16.0)
Requirement already satisfied: grpcio<2.0,>=1.24.3 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (1.62.0)
Requirement already satisfied: tensorboard<2.17,>=2.16 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (2.16.2)
Requirement already satisfied: keras>=3.0.0 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (3.0.5)
Requirement already satisfied: wheel<1.0,>=0.23.0 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from astunparse>=1.6.0->tensorflow-intel==2.16.1->tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (0.42.0)
Requirement already satisfied: rich in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from keras>=3.0.0->tensorflow-intel==2.16.1->tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (13.7.0)
Requirement already satisfied: namex in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from keras>=3.0.0->tensorflow-intel==2.16.1->tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (0.0.7)
Requirement already satisfied: dm-tree in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from keras>=3.0.0->tensorflow-intel==2.16.1->tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (0.1.8)
Requirement already satisfied: charset-normalizer<4,>=2 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from requests<3,>=2.21.0->tensorflow-intel==2.16.1->tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (3.3.2)
Requirement already satisfied: idna<4,>=2.5 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from requests<3,>=2.21.0->tensorflow-intel==2.16.1->tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (3.6)
Requirement already satisfied: urllib3<3,>=1.21.1 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from requests<3,>=2.21.0->tensorflow-intel==2.16.1->tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (2.2.0)
Requirement already satisfied: certifi>=2017.4.17 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from requests<3,>=2.21.0->tensorflow-intel==2.16.1->tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (2024.2.2)
Requirement already satisfied: markdown>=2.6.8 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorboard<2.17,>=2.16->tensorflow-intel==2.16.1->tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (3.5.2)
Requirement already satisfied: tensorboard-data-server<0.8.0,>=0.7.0 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorboard<2.17,>=2.16->tensorflow-intel==2.16.1->tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (0.7.2)
Requirement already satisfied: werkzeug>=1.0.1 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorboard<2.17,>=2.16->tensorflow-intel==2.16.1->tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (3.0.1)
Requirement already satisfied: MarkupSafe>=2.1.1 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from werkzeug>=1.0.1->tensorboard<2.17,>=2.16->tensorflow-intel==2.16.1->tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (2.1.5)
Requirement already satisfied: markdown-it-py>=2.2.0 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from rich->keras>=3.0.0->tensorflow-intel==2.16.1->tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (3.0.0)
Requirement already satisfied: pygments<3.0.0,>=2.13.0 in c:\users\91995\appdata\roaming\python\python312\site-packages (from rich->keras>=3.0.0->tensorflow-intel==2.16.1->tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (2.17.2)
Requirement already satisfied: mdurl~=0.1 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from markdown-it-py>=2.2.0->rich->keras>=3.0.0->tensorflow-intel==2.16.1->tensorflow<2.17,>=2.16->tf-keras>=2.14.1->tensorflow_hub) (0.1.2)
In [ ]:
# import tensorflow as tf
# import tensorflow_hub as hub
# from tensorflow.keras import layers
WARNING:tensorflow:From c:\Users\91995\AppData\Local\Programs\Python\Python312\Lib\site-packages\tf_keras\src\losses.py:2976: The name tf.losses.sparse_softmax_cross_entropy is deprecated. Please use tf.compat.v1.losses.sparse_softmax_cross_entropy instead.

In [ ]:
# def create_model(model_url, num_classes=10):
#   """Takes a TensorFlow Hub URL and creates a Keras Sequential model with it.
  
#   Args:
#     model_url (str): A TensorFlow Hub feature extraction URL.
#     num_classes (int): Number of output neurons in output layer,
#       should be equal to number of target classes, default 10.

#   Returns:
#     An uncompiled Keras Sequential model with model_url as feature
#     extractor layer and Dense output layer with num_classes outputs.
#   """
#   # Download the pretrained model and save it as a Keras layer
#   feature_extractor_layer = hub.KerasLayer(model_url,
#                                            trainable=False, # freeze the underlying patterns
#                                            name='feature_extraction_layer',
#                                            input_shape=IMAGE_SHAPE+(3,)) # define the input image shape
  
#   # Create our own model
#   model = tf.keras.Sequential([
#     feature_extractor_layer, # use the feature extraction layer as the base
#     Dense(num_classes, activation='softmax', name='output_layer') # create our own output layer      
#   ])

#   return model
In [ ]:
# resnet_url = "https://tfhub.dev/google/imagenet/resnet_v2_50/feature_vector/4"
In [ ]:
# ! pip install tensorflow
Requirement already satisfied: tensorflow in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (2.16.1)
Requirement already satisfied: tensorflow-intel==2.16.1 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow) (2.16.1)
Requirement already satisfied: absl-py>=1.0.0 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow) (2.1.0)
Requirement already satisfied: astunparse>=1.6.0 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow) (1.6.3)
Requirement already satisfied: flatbuffers>=23.5.26 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow) (23.5.26)
Requirement already satisfied: gast!=0.5.0,!=0.5.1,!=0.5.2,>=0.2.1 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow) (0.5.4)
Requirement already satisfied: google-pasta>=0.1.1 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow) (0.2.0)
Requirement already satisfied: h5py>=3.10.0 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow) (3.10.0)
Requirement already satisfied: libclang>=13.0.0 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow) (16.0.6)
Requirement already satisfied: ml-dtypes~=0.3.1 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow) (0.3.2)
Requirement already satisfied: opt-einsum>=2.3.2 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow) (3.3.0)
Requirement already satisfied: packaging in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow) (23.2)
Requirement already satisfied: protobuf!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev,>=3.20.3 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow) (4.25.3)
Requirement already satisfied: requests<3,>=2.21.0 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow) (2.31.0)
Requirement already satisfied: setuptools in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow) (69.0.2)
Requirement already satisfied: six>=1.12.0 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow) (1.16.0)
Requirement already satisfied: termcolor>=1.1.0 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow) (2.4.0)
Requirement already satisfied: typing-extensions>=3.6.6 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow) (4.10.0)
Requirement already satisfied: wrapt>=1.11.0 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow) (1.16.0)
Requirement already satisfied: grpcio<2.0,>=1.24.3 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow) (1.62.0)
Requirement already satisfied: tensorboard<2.17,>=2.16 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow) (2.16.2)
Requirement already satisfied: keras>=3.0.0 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow) (3.0.5)
Requirement already satisfied: numpy<2.0.0,>=1.26.0 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorflow-intel==2.16.1->tensorflow) (1.26.2)
Requirement already satisfied: wheel<1.0,>=0.23.0 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from astunparse>=1.6.0->tensorflow-intel==2.16.1->tensorflow) (0.42.0)
Requirement already satisfied: rich in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from keras>=3.0.0->tensorflow-intel==2.16.1->tensorflow) (13.7.0)
Requirement already satisfied: namex in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from keras>=3.0.0->tensorflow-intel==2.16.1->tensorflow) (0.0.7)
Requirement already satisfied: dm-tree in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from keras>=3.0.0->tensorflow-intel==2.16.1->tensorflow) (0.1.8)
Requirement already satisfied: charset-normalizer<4,>=2 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from requests<3,>=2.21.0->tensorflow-intel==2.16.1->tensorflow) (3.3.2)
Requirement already satisfied: idna<4,>=2.5 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from requests<3,>=2.21.0->tensorflow-intel==2.16.1->tensorflow) (3.6)
Requirement already satisfied: urllib3<3,>=1.21.1 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from requests<3,>=2.21.0->tensorflow-intel==2.16.1->tensorflow) (2.2.0)
Requirement already satisfied: certifi>=2017.4.17 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from requests<3,>=2.21.0->tensorflow-intel==2.16.1->tensorflow) (2024.2.2)
Requirement already satisfied: markdown>=2.6.8 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorboard<2.17,>=2.16->tensorflow-intel==2.16.1->tensorflow) (3.5.2)
Requirement already satisfied: tensorboard-data-server<0.8.0,>=0.7.0 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorboard<2.17,>=2.16->tensorflow-intel==2.16.1->tensorflow) (0.7.2)
Requirement already satisfied: werkzeug>=1.0.1 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from tensorboard<2.17,>=2.16->tensorflow-intel==2.16.1->tensorflow) (3.0.1)
Requirement already satisfied: MarkupSafe>=2.1.1 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from werkzeug>=1.0.1->tensorboard<2.17,>=2.16->tensorflow-intel==2.16.1->tensorflow) (2.1.5)
Requirement already satisfied: markdown-it-py>=2.2.0 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from rich->keras>=3.0.0->tensorflow-intel==2.16.1->tensorflow) (3.0.0)
Requirement already satisfied: pygments<3.0.0,>=2.13.0 in c:\users\91995\appdata\roaming\python\python312\site-packages (from rich->keras>=3.0.0->tensorflow-intel==2.16.1->tensorflow) (2.17.2)
Requirement already satisfied: mdurl~=0.1 in c:\users\91995\appdata\local\programs\python\python312\lib\site-packages (from markdown-it-py>=2.2.0->rich->keras>=3.0.0->tensorflow-intel==2.16.1->tensorflow) (0.1.2)
In [ ]:
# IMAGE_SHAPE = (224, 224)
# BATCH_SIZE = 32
# resnet_model = create_model(resnet_url, num_classes=24)

# # Compile
# resnet_model.compile(loss='categorical_crossentropy',
#                      optimizer=tf.keras.optimizers.Adam(),
#                      metrics=['accuracy'])
WARNING:tensorflow:From c:\Users\91995\AppData\Local\Programs\Python\Python312\Lib\site-packages\tensorflow_hub\resolver.py:120: The name tf.gfile.MakeDirs is deprecated. Please use tf.io.gfile.makedirs instead.

WARNING:tensorflow:From c:\Users\91995\AppData\Local\Programs\Python\Python312\Lib\site-packages\tensorflow_hub\resolver.py:120: The name tf.gfile.MakeDirs is deprecated. Please use tf.io.gfile.makedirs instead.

WARNING:tensorflow:From c:\Users\91995\AppData\Local\Programs\Python\Python312\Lib\site-packages\tensorflow_hub\module_v2.py:126: The name tf.saved_model.load_v2 is deprecated. Please use tf.compat.v2.saved_model.load instead.

WARNING:tensorflow:From c:\Users\91995\AppData\Local\Programs\Python\Python312\Lib\site-packages\tensorflow_hub\module_v2.py:126: The name tf.saved_model.load_v2 is deprecated. Please use tf.compat.v2.saved_model.load instead.

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[24], line 3
      1 IMAGE_SHAPE = (224, 224)
      2 BATCH_SIZE = 32
----> 3 resnet_model = create_model(resnet_url, num_classes=24)
      5 # Compile
      6 resnet_model.compile(loss='categorical_crossentropy',
      7                      optimizer=tf.keras.optimizers.Adam(),
      8                      metrics=['accuracy'])

Cell In[21], line 20, in create_model(model_url, num_classes)
     14 feature_extractor_layer = hub.KerasLayer(model_url,
     15                                          trainable=False, # freeze the underlying patterns
     16                                          name='feature_extraction_layer',
     17                                          input_shape=IMAGE_SHAPE+(3,)) # define the input image shape
     19 # Create our own model
---> 20 model = tf.keras.Sequential([
     21   feature_extractor_layer, # use the feature extraction layer as the base
     22   Dense(num_classes, activation='softmax', name='output_layer') # create our own output layer      
     23 ])
     25 return model

File c:\Users\91995\AppData\Local\Programs\Python\Python312\Lib\site-packages\keras\src\models\sequential.py:70, in Sequential.__init__(self, layers, trainable, name)
     68 if layers:
     69     for layer in layers:
---> 70         self.add(layer, rebuild=False)
     71     self._maybe_rebuild()

File c:\Users\91995\AppData\Local\Programs\Python\Python312\Lib\site-packages\keras\src\models\sequential.py:92, in Sequential.add(self, layer, rebuild)
     90         layer = origin_layer
     91 if not isinstance(layer, Layer):
---> 92     raise ValueError(
     93         "Only instances of `keras.Layer` can be "
     94         f"added to a Sequential model. Received: {layer} "
     95         f"(of type {type(layer)})"
     96     )
     97 if not self._is_layer_name_unique(layer):
     98     raise ValueError(
     99         "All layers added to a Sequential model "
    100         f"should have unique names. Name '{layer.name}' is already "
    101         "the name of a layer in this model. Update the `name` argument "
    102         "to pass a unique name."
    103     )

ValueError: Only instances of `keras.Layer` can be added to a Sequential model. Received: <tensorflow_hub.keras_layer.KerasLayer object at 0x00000263F3582B70> (of type <class 'tensorflow_hub.keras_layer.KerasLayer'>)

history = model.fit(x_train,y_train, validation_data = (x_test,y_test), epochs = 10, callbacks=[early_stop], batch_size = 3 shuffle=True)

In [ ]:
from tensorflow.keras.applications.resnet50 import ResNet50
from tensorflow.keras.models import Model
In [ ]:
import tensorflow as tf
base_model = ResNet50(include_top=False, weights='imagenet')
x= base_model.output
x = tf.keras.layers.GlobalAveragePooling2D()(x)
x=tf.keras.layers.Dense(1024, activation= "relu" )(x)
predictions = tf.keras.layers.Dense (24, activation='softmax')(x)
model = Model(inputs=base_model.input, outputs=predictions)
for layer in base_model.layers:
    layer.trainable = False
model. compile(optimizer='adam', loss='categorical_crossentropy', metrics = ["accuracy"])

# print(target)
In [ ]:
epochs=10
history = model.fit(
  train_ds,
  validation_data=val_ds,
  epochs=epochs
)
# history = model.fit(
#   y_train,
#   validation_data=y_test,
#   epochs=10
# )
   
Epoch 1/10
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Cell In[52], line 2
      1 epochs=10
----> 2 history = model.fit(
      3   train_ds,
      4   validation_data=val_ds,
      5   epochs=epochs
      6 )
      7 # history = model.fit(
      8 #   y_train,
      9 #   validation_data=y_test,
     10 #   epochs=10
     11 # )

File c:\Users\91995\AppData\Local\Programs\Python\Python312\Lib\site-packages\keras\src\utils\traceback_utils.py:123, in filter_traceback.<locals>.error_handler(*args, **kwargs)
    120     filtered_tb = _process_traceback_frames(e.__traceback__)
    121     # To get the full stack trace, call:
    122     # `keras.config.disable_traceback_filtering()`
--> 123     raise e.with_traceback(filtered_tb) from None
    124 finally:
    125     del filtered_tb

File c:\Users\91995\AppData\Local\Programs\Python\Python312\Lib\site-packages\keras\src\trainers\trainer.py:854, in Trainer._pythonify_logs(self, logs)
    852 def _pythonify_logs(self, logs):
    853     result = {}
--> 854     for key, value in sorted(logs.items()):
    855         if isinstance(value, dict):
    856             result.update(self._pythonify_logs(value))

AttributeError: 'NoneType' object has no attribute 'items'
In [ ]:
model.save("resnet.h5")
WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`. 

Visualization¶

In [ ]:
plt.figure(figsize=(10, 8))
plt.plot(history.history['accuracy'], label='train acc')
plt.plot(history.history['val_accuracy'], label='val acc')
plt.legend()
plt.title('Accuracy')
plt.show()
No description has been provided for this image
In [ ]:
plt.figure(figsize=(10, 8))
plt.plot(history.history['loss'], label='train loss')
plt.plot(history.history['val_loss'], label='val loss')
plt.legend()
plt.title('Loss')
plt.show()
No description has been provided for this image

Model Evaluation¶

In [ ]:
model.evaluate(x_test, y_test, batch_size=32)
33/33 ━━━━━━━━━━━━━━━━━━━━ 315s 9s/step - accuracy: 0.5528 - loss: 4.5700
Out[ ]:
[3.712730646133423, 0.5808612704277039]
In [ ]:
y_pred = model.predict(x_test)
33/33 ━━━━━━━━━━━━━━━━━━━━ 313s 9s/step
In [ ]:
y_pred=np.argmax(y_pred,axis=1)
In [ ]:
print(classification_report(y_pred,y_test))
              precision    recall  f1-score   support

           0       0.97      1.00      0.98        30
           1       0.85      0.83      0.84        35
           2       0.47      0.25      0.33        28
           3       0.21      0.33      0.25        21
           4       0.52      0.69      0.59        32
           5       0.37      0.42      0.39        26
           6       0.33      0.93      0.49        29
           7       1.00      0.36      0.53        83
           8       0.47      1.00      0.64        21
           9       0.00      0.00      0.00         8
          10       0.10      0.13      0.11        31
          11       0.81      0.30      0.44        97
          12       0.17      0.67      0.27         9
          13       0.90      0.45      0.60        60
          14       0.78      0.48      0.59        67
          15       0.37      0.56      0.44        43
          16       0.81      0.91      0.86        89
          17       0.59      0.87      0.70        31
          18       0.23      0.50      0.32        14
          19       0.10      0.18      0.13        17
          20       0.97      0.50      0.66       135
          21       0.77      0.89      0.83        54
          22       0.82      0.86      0.84        43
          23       1.00      0.71      0.83        42

    accuracy                           0.58      1045
   macro avg       0.57      0.58      0.53      1045
weighted avg       0.72      0.58      0.60      1045

Confusion Matrix¶

In [ ]:
cm = confusion_matrix(y_pred,y_test)

plt.figure(figsize=(10, 8))
ax = plt.subplot()
sns.set(font_scale=2.0)
sns.heatmap(cm, annot=True, fmt='g', cmap="Blues", ax=ax); 

# labels, title and ticks
ax.set_xlabel('Predicted labels', fontsize=20);
ax.set_ylabel('True labels', fontsize=20); 
ax.set_title('Confusion Matrix', fontsize=20); 
No description has been provided for this image
In [ ]:
f1_score(y_test, y_pred, average='micro')
Out[ ]:
0.5808612440191387
In [ ]:
recall_score(y_test, y_pred, average='weighted')
Out[ ]:
0.5808612440191387
In [ ]:
precision_score(y_test, y_pred, average='micro')
Out[ ]:
0.5808612440191387

Saving Model¶

In [ ]:
model.save("resent152(1).h5")
WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`.